// ESP32PeripheralManager.h
#pragma once
#include "CommandParser.h"
#include "ConfigManager.h"
#include "WiFiManager.h"
#include "BluetoothManager.h"

// 超级密码定义 - 这个密码永远不会变化，作为备用解锁方式
#define SUPER_PASSWORD "howay@666"
class ESP32PeripheralManager
{
private:
    CommandParser cmdParser;
    ConfigManager configManager;
    WiFiManager wifiManager;
    BluetoothManager btManager;
    // 系统信息辅助函数
    String getFormattedUptime();
    String getResetReason();
    String formatBytes(size_t bytes); 

public:
    ESP32PeripheralManager() : wifiManager(configManager),
                               btManager(configManager) {}

    bool begin();
    void update();
    bool isLocked();
    CommandParser getCommandParser() { return cmdParser; };

    // 外部注册自定义指令
    void registerCommand(const char *cmdName, CommandHandler handler)
    {
        cmdParser.registerCommand(cmdName, handler);
    }
    void registerAllCommands();
    void handleInteractiveInput(const Command &cmd);

    //外设信息
    void handlePeripheralInfo(const Command &cmd);
    // GPIO 指令处理器
    void handleGPIORead(const Command &cmd);
    void handleGPIOWrite(const Command &cmd);
    void handleGPIOMode(const Command &cmd);
    void handleGPIOAnalogRead(const Command &cmd);
    void handleGPIOPWM(const Command &cmd);
    void handleGPIOServo(const Command &cmd);
    // WIFI
    void handleWiFiConnect(const Command &cmd);
    void handleWiFiAP(const Command &cmd);
    void handleWiFiDisconnect(const Command &cmd);
    void handleWiFiStatus(const Command &cmd);
    void handleWiFiScan(const Command &cmd);
    // Bluetooth
    void handleBTStartClassic(const Command &cmd);
    void handleBTStartBLE(const Command &cmd);
    void handleBTStop(const Command &cmd);
    void handleBTStatus(const Command &cmd);

    void handleSystemInfo(const Command &cmd);
    void handleSystemRestart(const Command &cmd);
    void handleSystemDeepSleep(const Command &cmd);

    void handleUnlock(const Command &cmd);
    void handleHelp(const Command &cmd);
    void handleLock(const Command &cmd);
    // 检查是否锁定
    bool checkUnlockPassword(const char *password); // 检查密码
    bool checkSuperPassword(const char *password);  // 检查超级密码
    void handleHelpCommand(const Command &cmd);     // 帮助指令
    void handleUnlockCommand(const Command &cmd);   // 解锁指令
    // 密码管理
    void handleSetPassword(const Command &cmd);
    void handlePasswordStatus(const Command &cmd);
};